﻿//-----------------------------------------------------------------------------------------
// <copyright file="Int32Converter.cs" company="Jakub Florczyk (www.jakubflorczyk.pl)">
//      Copyright © 2009 Jakub Florczyk (www.jakubflorczyk.pl)
//      http://flakernet.codeplex.com/
// </copyright>
//-----------------------------------------------------------------------------------------

namespace FlakerNET.Converters
{
    using System;
    using System.Globalization;
    using Newtonsoft.Json;

    /// <summary>
    /// Int32 konwerter do Newtonsoft.Json
    /// </summary>
    /// <remarks>
    /// Konwerter używany w przypadkach gdy Json zwraca typ String a powinien być Int32.
    /// </remarks>
    internal class Int32Converter : JsonConverter
    {
        /// <summary>
        /// Zapisuje reprezentacje JSON obiektu.
        /// </summary>
        /// <param name="writer">Json writer.</param>
        /// <param name="value">Wartość obiektu.</param>
        public override void WriteJson(JsonWriter writer, object value)
        {
            writer.WriteValue(value.ToString());
        }

        /// <summary>
        /// Odczytuje reprezentacje JSON obiektu.
        /// </summary>
        /// <param name="reader">Json reader.</param>
        /// <param name="objectType">Typ obiektu.</param>
        /// <returns>Wartość obiektu.</returns>
        public override object ReadJson(JsonReader reader, Type objectType)
        {
            return Convert.ToInt32(reader.Value, CultureInfo.InvariantCulture);
        }

        /// <summary>
        /// Określa czy aktualna instancja może skonwertować podany typ obiektu.
        /// </summary>
        /// <param name="objectType">Typ obiektu.</param>
        /// <returns>Prawda jeżeli instancja może skonwertować podany typ obiektu; w przeciwnym przypadku fałsz.</returns>
        public override bool CanConvert(Type objectType)
        {
            return typeof(int).IsAssignableFrom(objectType);
        }
    }
}
